package controllers

import (
	"encoding/json"
	"fmt"
	"github.com/boyane/chartroom/common/message"
	"github.com/boyane/chartroom/common/utils"
	"net"
	"os"
)

// 显示操作菜单
func ShowMenu()  {
	var key int
	for{
		fmt.Println("-----------欢迎XXX登陆成功----------")
		fmt.Println("1. 显示在线列表")
		fmt.Println("2. 发送消息")
		fmt.Println("3. 显示消息")
		fmt.Println("4. 退出系统")

		fmt.Println("请输入(1-4):")
		fmt.Scanf("%d\n", &key)

		switch key {
			case 1:
				fmt.Println("在线列表:")
				PrintOnlineList()
			case 2:
				var content string
				fmt.Println("请输入你要发送的消息:)")
				fmt.Scanf("%s\n", &content)
				sms := Sms{
					Conn: curUser.Conn,
					Content: content,
					UserId: curUser.UserId,
				}
				if err := sms.SmsEmitNews();err != nil{
					fmt.Println("sms.SmsEmitNews fail err=", err)
				}
			case 3:
				fmt.Println("显示消息")
			case 4:
				fmt.Println("退出系统...")
				os.Exit(0)
			default:
				fmt.Println("你的输入有误...")
		}
	}
}

// 监听服务端发送消息协程
func ServerProcessMes(conn net.Conn){
	ts := &utils.Transfer{}
	ts.Conn = conn
	for{
		// 循环监听服务端发送的消息(没有发送消息就会阻塞在这)
		fmt.Println("等待服务端发送消息...")
		mes, err := ts.ReadPkg()
		if err != nil{
			fmt.Println("ts.ReadPkg err =", err)
			return
		}
		switch mes.Type {
		case message.UserOnlineMesType: // 接收服务器发送的消息
			handleUserOnlineMes(mes.Data)
			PrintOnlineList() // 打印在线列表
		case message.SmsGroupEmitResMesType: // 接收群发消息
			sms := Sms{}
			sms.handleSmsGroupEmitMes(mes.Data)
		default:
			fmt.Println("未知消息类型")
		}
	}
}

// 处理用户上线消息
func handleUserOnlineMes(mes string){
	var resMes message.UserOnlineMes
	err := json.Unmarshal([]byte(mes), &resMes)
	if err != nil{
		fmt.Println("handleUserOnlineMes -> json.Unmarshal err =", err)
		return
	}
	OnlineUsers.Users = append(OnlineUsers.Users, resMes.UserId)
}


